From 766655fa4181f47da6a34250843e443331198a31 Mon Sep 17 00:00:00 2001 From: Charles Lombardo Date: Tue, 18 Apr 2023 04:10:28 -0400 Subject: android: Prevent editing unsafe settings at runtime There currently isn't a visual "disabled" cue for any of the view holders that aren't the switch setting. This will be improved in the future. --- .../features/settings/model/view/SettingsItem.kt | 7 +++++++ .../settings/ui/viewholder/DateTimeViewHolder.kt | 8 +++++--- .../settings/ui/viewholder/SingleChoiceViewHolder.kt | 16 ++++++++++------ .../features/settings/ui/viewholder/SliderViewHolder.kt | 8 +++++--- .../settings/ui/viewholder/SwitchSettingViewHolder.kt | 10 ++++++++-- 5 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt index 599da1380..c02848403 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt @@ -3,6 +3,7 @@ package org.yuzu.yuzu_emu.features.settings.model.view +import org.yuzu.yuzu_emu.NativeLibrary import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting /** @@ -19,6 +20,12 @@ abstract class SettingsItem( ) { abstract val type: Int + val isEditable: Boolean + get() { + if (!NativeLibrary.isRunning()) return true + return setting?.isRuntimeEditable ?: false + } + companion object { const val TYPE_HEADER = 0 const val TYPE_SWITCH = 1 diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt index 5702fc0eb..e433373ed 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt @@ -11,10 +11,10 @@ import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter class DateTimeViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : SettingViewHolder(binding.root, adapter) { - private lateinit var item: DateTimeSetting + private lateinit var setting: DateTimeSetting override fun bind(item: SettingsItem) { - this.item = item as DateTimeSetting + setting = item as DateTimeSetting binding.textSettingName.setText(item.nameId) if (item.descriptionId!! > 0) { binding.textSettingDescription.setText(item.descriptionId) @@ -25,6 +25,8 @@ class DateTimeViewHolder(val binding: ListItemSettingBinding, adapter: SettingsA } override fun onClick(clicked: View) { - adapter.onDateTimeClick(item, bindingAdapterPosition) + if (setting.isEditable) { + adapter.onDateTimeClick(setting, bindingAdapterPosition) + } } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt index a82f49f44..b92334522 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt @@ -12,10 +12,10 @@ import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : SettingViewHolder(binding.root, adapter) { - private lateinit var item: SettingsItem + private lateinit var setting: SettingsItem override fun bind(item: SettingsItem) { - this.item = item + setting = item binding.textSettingName.setText(item.nameId) binding.textSettingDescription.visibility = View.VISIBLE if (item.descriptionId!! > 0) { @@ -34,14 +34,18 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti } override fun onClick(clicked: View) { - if (item is SingleChoiceSetting) { + if (!setting.isEditable) { + return + } + + if (setting is SingleChoiceSetting) { adapter.onSingleChoiceClick( - (item as SingleChoiceSetting), + (setting as SingleChoiceSetting), bindingAdapterPosition ) - } else if (item is StringSingleChoiceSetting) { + } else if (setting is StringSingleChoiceSetting) { adapter.onStringSingleChoiceClick( - (item as StringSingleChoiceSetting), + (setting as StringSingleChoiceSetting), bindingAdapterPosition ) } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt index 2d9fd11f9..1c2f74d56 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt @@ -11,10 +11,10 @@ import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter class SliderViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : SettingViewHolder(binding.root, adapter) { - private lateinit var item: SliderSetting + private lateinit var setting: SliderSetting override fun bind(item: SettingsItem) { - this.item = item as SliderSetting + setting = item as SliderSetting binding.textSettingName.setText(item.nameId) if (item.descriptionId!! > 0) { binding.textSettingDescription.setText(item.descriptionId) @@ -25,6 +25,8 @@ class SliderViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAda } override fun onClick(clicked: View) { - adapter.onSliderClick(item, bindingAdapterPosition) + if (setting.isEditable) { + adapter.onSliderClick(setting, bindingAdapterPosition) + } } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt index 3fedb4969..825e9d0d0 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt @@ -13,8 +13,10 @@ import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter: SettingsAdapter) : SettingViewHolder(binding.root, adapter) { + private lateinit var setting: SwitchSetting + override fun bind(item: SettingsItem) { - val setting = item as SwitchSetting + setting = item as SwitchSetting binding.textSettingName.setText(item.nameId) if (item.descriptionId!! > 0) { binding.textSettingDescription.setText(item.descriptionId) @@ -27,9 +29,13 @@ class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter binding.switchWidget.setOnCheckedChangeListener { _: CompoundButton, _: Boolean -> adapter.onBooleanClick(item, bindingAdapterPosition, binding.switchWidget.isChecked) } + + binding.switchWidget.isEnabled = setting.isEditable } override fun onClick(clicked: View) { - binding.switchWidget.toggle() + if (setting.isEditable) { + binding.switchWidget.toggle() + } } } -- cgit v1.2.3